package com.example;

import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;

/**
 * @author twj
 * @description 函数式接口案例
 * @time 2023/9/3^15:07:41
 */
public class FunctionInterface {
    public static void main(String[] args) {
        /*
         * 只有一个抽象方法的接口我们称之为函数接口。JDK的函数式接口都加上了@FunctionalInterface注解进行标识
         * ，但是无论是否加上该注解只要接口中只有一个抽象方法，都是函数式接口。
         * 常见的函数式接口有：
         *   Consumer - 消费接口：可以在方法中对传入的参数进行消费。
         *   Function - 计算转换接口：可以在方法中对传入的参数计算和转换，将结果返回。
         *   Predicate - 判断接口：可以在方法中对传入的参数条件判断，返回判断结果。
         *   Supplier - 生产型接口：可以在方法中创建对象，把创建好的对象返回。
         *
         */

        new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println("啦啦啦");
            }
        };

        new Function<Integer, Integer>() {
            @Override
            public Integer apply(Integer integer) {
                return integer + 10;
            }
        };

        new Predicate<String>() {
            @Override
            public boolean test(String s) {
                return s == "nb";
            }
        }.and(s -> 1 + 1 == 2).or(s -> 3 + 3 == 7);

        new Supplier<Object>() {
            @Override
            public Object get() {
                return new Object();
            }
        };

    }
}
